/*
 * structs.h
 *
 *  Created on: Jun 15, 2011
 *      Author: tualibano
 */

#ifndef STRUCTS_H_
#define STRUCTS_H_

#include "configurar.h"

typedef struct Vizinho {
    int PortaTcp;
    int PortaUdp;
    char Ip[16];
    int Latencia;
    int Pontos;
} Vizinho;

/*
 struct param {
 int i;
 int socket;
 char arquivo[30];
 };
 */
typedef struct TabelaVizinhos {
    //todo: trasnferir esse valor para a configuração.
    Vizinho Vizinhos[CAPACIDADE_TABELA];
    struct TabelaVizinhos *ProximoBloco;
    struct TabelaVizinhos *BlocoAnterior;
    int vagas;
} TabelaVizinhos;

struct param {
    int i;
    int socket;
    char arquivo[30];
    int resto;
    int loopcount;
};
// declaração da tabela de vizinhos.
// essa tabela é utilizada globalmente.
TabelaVizinhos *tabela_vizinhos;

// retorna zero se diferentes. analiza ip e porta.
extern int ComparaVizinho(Vizinho *v1, Vizinho *v2);

// bzeroo!!!
extern void ZerarVizinho(Vizinho *elemento);

// cria a tabela de vizinhos.
//
extern void CriarTabelaVizinho(TabelaVizinhos **Tabela);

// adiciona vizinhos na tabela de vizinhos local.
// cria tabelas adicionais se faltar espaço.
extern int AdicionarVizinho(TabelaVizinhos *Tabela, Vizinho *Novo);

// remove elemento. se a tabela tem só um, ele é zerado;
// se tem mais de 1 elemento, o ultimo da tabela é copiado
// em cima do elemento a ser apagado, e a ultima linha é
// zerada.
extern int RemoverVizinho(TabelaVizinhos *Tabela, Vizinho *eliminar);

// apenas mostra todas as entradas da tabela
// na saida padrão.
extern int PrintTabela(TabelaVizinhos *tabela);

// envia a tabela para um computador na rede.
// é utilizada na conexão inicial.
extern int SendTabela(TabelaVizinhos *tabela, int socket);

// apenas faz a filtragem para manter
// só o ip de forma a simplificar a pos-filtragem.
extern int StrFiltraIp(char *str, int tamanho);

// executa busca na tabela dada.
extern Vizinho * BuscaTabela(TabelaVizinhos *btabela, Vizinho *elemento);

// apenas faz a filtragem para manter
// só o ip de forma a simplificar a pos-filtragem.
extern int StrFiltraIp(char *, int);

#endif /* STRUCTS_H_ */